package ch04.Normalized;

import ch04.homoAST.AST;
import ch04.homoAST.Token;

public class ExprNode extends AST {
    public static final int tINVALID = 0;   // 非法表达式
    public static final int tINTEGER = 1;   // 整数表达式
    public static final int tVECTOR = 2;    // 向量表达式

    /**
     * 记录每个expr节点的表达式类型（整数型或者向量型）
     * 这里指的是表达式值的类型，不要与getNodeType()混淆
     * getNodeType()是外部访问者使用的，能区分不同节点
     */
    int evalType;

    public int getEvalType() {
        return evalType;
    }

    public ExprNode(Token payload) {
        super(payload);
    }


    /**
     * 如果ExprNode已经知道表达式的类型，转换文本时就该加上
     * @return
     */
    public String toString() {
        if (evalType != tINVALID) {
            return super.toString() + "<type=" + (evalType == tINTEGER ? "tINTEGER" : "tVECTOR") + ">";
        }
        return super.toString();
    }
}
